約 5,187,684 件
https://w.atwiki.jp/atachi/pages/36.html
アイテムの表示 [#pd6f59e0] チェックボックスをもつツリーコントロール TreeViewはWindowsのエクスプローラーのように、開閉可能な枝と葉を階層構造に配置したビューです。 TreeViewItemのテンプレートをカスタマイズすることで、アイテムの表示形式を変更することができます。 アイテムの表示 ItemsSourceプロパティはバインディングを使ってコレクションを与えることができます。 ObservableCollection string items = new ObservableCollection string (); items.Add("北海道"); items.Add("青森"); items.Add("秋田"); items.Add("山形"); // XAML TreeView ItemsSource="{Binding items}" / チェックボックスをもつツリーコントロール CodeProjectにツリーコントロールの各アイテムにチェックボックスを持たせるためのサンプルコードが投稿されています。 http //www.codeproject.com/KB/WPF/TreeViewWithCheckBoxes.aspx
https://w.atwiki.jp/wpfapp/pages/13.html
WPF(Windows Presentation Foundation)とは 一言で言えば、Windows用アプリケーション開発のためのGUIライブラリ。細かい事を言えば.NET Framework上で動作するため、ターゲット環境はWindowsに限るわけではないし、GUIライブラリというよりは、GUIアプリ開発のためのフレームワークと呼べるかもしれない。 いずれにしてもWindowsで、しかも.Net Frameworkを使ったGUIアプリ開発をする際にはWindows Formsと並んで選択肢の一つとなる存在。WPFの方が後発である分、先進的な設計思想に基づいて作られている。Windows Formsの後継というほどではないが、Microsoftとしては今後はWindows FormからWPFの開発へ注力してくらしい。 WPFの特徴 Windows FormsやVisual C++におけるMFCなどと比較して、特記すべき事項は ロジックとインターフェースの分離が可能 ただでさえ動作の重い.Net Frameworkだが、それに輪をかけて重い 描画はDirect3Dを用いるためGPUの恩恵を受けれる データドリブンなアプリケーションを作成できる(データバインディング) 1.は、WebにおけるHTMLとJavaScriptの関係に似てるのかもしれない。WPFではUI部分をXAMLと呼ばれるXMLで記述し、処理の部分をC#やVisual Basicで記述する。UI部分のXML記述する方式はAdobe AirやSilverlightのようなRIAにもよく見られる。XAMLの仕様も膨大なものになっているので私も触りしか把握できていないが、HTMLとCSSの関係のようにUIの構造と見栄えも分離できれば良いと思うのが、見栄えも今のところXAMLで定義するようだ。複雑な見栄えはExpression Blend等の外部ツールで定義することをMicrosoftは想定しているようだ。 2. フレームワークの多用は開発が容易になる反面、実行速度が犠牲になりがちだがWPFも例外ではない。とはいえ起動は遅いものの体感では問題になるほどではなかった。対象ユーザを考慮して、非力なPCが想定される場合は、WPFの選択には注意が必要。 3. マルチメディア・グラフィック周りの対応が充実しているので、特に意識せずコードを書いてもGPUを活用してくれるのは有り難いだろう。私はこの辺りを意識しないといけないアプリを書いたことが無いので、あまり書けることがないです。 4. WPFでの開発において肝となる部分であり、同時に慣れない者にとっては最大の壁となる概念。要はデータとUIコントロールを文字通り結びつけて(バインド)して、データが更新されればそれは即座にUIコントロールに反映される。逆にUIコントロールから編集作業をすればそのままデータが更新される。データが更新されてもユーザーが更新操作をしなければ反映できなかったイベントドリブンに比べれば、容易かつ直感的なアプローチで開発できる。が、どのコントロールにどんなデータがバインドできるのか、どのような方法でバインドするのかといった情報が乏しい。DataBaseのデータも直接バインドできるため、これが主な用途と思われるが情報もこれに偏っているおり私は非常に困っている最中です。
https://w.atwiki.jp/atachi/pages/48.html
WPFが実装しているコントロールは、旧フォームや他のGUIのフレームワークと比べるとま非常に貧弱なので注意が必要。 フォーム中心のアプリケーションの開発を行うならば、今はまだフォームアプリケーションプロジェクトでの開発がいいのかもしれません。 目次 記事の紹介 [WPF][C#]CheckedListBoxを作ろう 目次 XAMLイベントグラフィックスコマンドコンポーネントコンテナコントロールChartColorPickerMicrosoft Outlook Appointment ViewMonthview CalendarNotifyMessagePropertyGridコンボボックスタブコントロールチェックボックスリストボックスツリーコントロールテキストボックスバリデーションデータグリッドリストビューリストボックススタイルデータバインディング依存関係プロパティ 記事の紹介 [WPF][C#]CheckedListBoxを作ろう かずきのBlog CheckedListBoxを作ろう 各項目にチェックボックスがついたListBoxの実装方法と説明。
https://w.atwiki.jp/wpfapp/pages/14.html
デザイナにドラッグ&ドロップでコントロールで配置していくのはMFCやWindows Formとそう変わらないがWPFにおいて、それはいくつかある配置方法の中の一つであり、各種の配置用コントロールが用意されている。入れ子関係を表現できるXMLでUI構造を定義するというWPFの特徴から推察できるとおり、各コントロールは入れ子にすることが可能。 DockPanel 上部にメニュー/ツールバー、下部にステータスバーといった一般的なWindowsアプリでお馴染みなレイアウトを構成する場合にお世話になるコントロール。 図解しないと解り辛いので、とりあえず判り易く解説しているサイトに誘導。 [WPF] WPF入門 ~レイアウト [DockPanel]~ http //blogs.wankuma.com/kzt/archive/2009/03/17/169777.aspx
https://w.atwiki.jp/atachi/pages/35.html
.NET Frameworks サードパーティー製 .NET Frameworks テキストボックス ツリーコントロール コンボボックス リストボックス リストビュー データグリッド タブコントロール チェックボックスリストボックス サードパーティー製 PropertyGrid ColorPicker Microsoft Outlook Appointment View NotifyMessage Monthview Calendar
https://w.atwiki.jp/osinko/pages/113.html
<資料> 非常に分かりやすい資料:Windows Presentation Foundation 概要(WPF) (.NET Framework) (このページの右隅下側に「Windows Presentation Foundation」の統合メニューがあり、そこから概要や基本構造などのページが閲覧できます。非常に分かりやすいので困ったときは読むこと) (慣れた頃に読むと良い)WPF入門 - @IT たぶんMSDN内で最新のバインディングに関するサンプルや資料で読みやすい:方法のトピック XAMLのコントロールの仕様を見たい場合はここが見やすい:System.Windows.Controls 名前空間 <C#(CLR)とXAML(WPF)のリソースとコレクションの連携方法> リソースとコード http //msdn.microsoft.com/ja-jp/library/vstudio/system.windows.resourcedictionary.aspx コレクションにバインドして選択に基づく情報を表示する SelectedValue プロパティ <描画に関する資料> 描画の要となるDrawingContextとDrawingVisualに関して簡潔に説明がある:Simple is best - Yahoo!ブログ <利用頻度の高いマークアップ拡張> Binding 通常のバインディング。{Binding X}という書き方は{Binding Path=X}と同じ意味である。ElementName=で対象をエレメントにしたり、Source=でソースにしたり、RelativeSource=でターゲットの位置に対して相対的な位置を指定することにより、バインディング ソースを取得できる。続くPathで対象のプロパティを指定する。バインディング・ソースがXMLデータの場合、PathプロパティではなくXPathプロパティを利用する TemplateBinding コントロールテンプレートの適用先のコントロールに与えられたプロパティ値を取得するために利用する 資料:RelativeSource のマークアップ拡張機能 例 StackPanel !--エレメントをキーで参照してバインディング-- TextBox x Name="TextBox1" Text="5"/ Slider Value="{Binding ElementName=TextBox1, Path=Text}"/ !--先祖をたどってWindow要素を見つけプロパティTitleをバインディング-- TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, Path=Title}"/ !--自分自身のプロパティWidthを参照してHeightにバインディング-- Rectangle Fill="Aqua" Width="50" Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}"/ /StackPanel <利用頻度の高いコードスニペット> propdp 依存プロパティを記述する際に非常に便利 <利用頻度の高いusing> System.ComponentModel DependencyObjectを利用したい場合に必要。INotifyPropertyChangedは自動実装される Microsoft.Win32 コモンダイアログの利用等に System.IO File.Open関数などファイル入出力 System.Windows.Markup XamlWriter.Save関数などシリアライズ <利用頻度の高いプロパティ> Resources リソース、XAML内にオブジェクトを作ったりする際に利用する。リソースのコードを書く位置に注意:利用するオブジェクトのコードより上(先に宣言しておく必要がある)に書かれている必要がある Content プロパティは Object 型である為、格納できる項目に制限は無い。つまり文字でもUIElementでもなんでも入れて表示できる DataContext 子へと継承可能なコレクションを指定する Items そのコントロールが扱うアイテムコレクション(絶対指定オブジェクト)。ItemsSourceとの併用は不可らしい ItemsSource そのコントロールで利用したいリソース内のコレクション、もしくはバインディングオブジェクトをここで設定する(相対指定オブジェクト) IsSynchronizedWithCurrentItem 選択アイテムの変更を反映させる。ComboBoxやListBoxエレメント等で利用する DisplayMemberPath オブジェクト内のテキスト表示するプロパティを指定する(ちなみにプロパティウインドウではキーボードで直接名前を入力した方が早い) Name エレメントの名前 ElementNameのキー値指定時にここで設定した一意のキー名を利用する。反対に言えばこれを設定しない場合バインディングできない(しない) Text 表示するテキスト SelectedValuePath 選択アイテムを値で参照する際のコレクション内のプロパティ先を文字列で指定できる SelectedValue 選択する値 SelectedIndex 選択するインデックス SelectedItem 現在選択されているアイテムオブジェクト。このまま続けて「.~」でプロパティを書いてもOK。例 Image Source="{Binding SelectedItem.FileLocation, ElementName=ComboBox1}" /Image <利用頻度の高いオブジェクト> Style スタイル指定。TargetTypeプロパティでスタイルを適用するターゲットをコントロール名で指定できる Setter Style等をセットする。Property と Value を使用して対象プロパティを指定し値をセットする。Style内に複数指定可能 ResourceDictionary リソースのオブジェクトを生成する。XAMLのファイル指定も可能。MergedDictionarieで複数の辞書を結合できる Style.Triggers トリガー動作するスタイルを指定する。プロパティにイベント、バリューに値を指定。子のSetterで設定指定する ControlTemplate コントロール・テンプレートを作成する。TargetTypeで動作するコントロール。XAMLで挟む内容に視覚要素を書くと良い ContentPresenter この要素が置かれた位置にコントロールの中身(=Contentプロパティに与えた値)が配置される コントロール・テンプレートがコントロールの表示方法をカスタマイズするものであるのに対して データ・テンプレートはデータの表示方法をカスタマイズするものである <トリガーの種類> Trigger: 特定のプロパティの値の変化をトリガーとして、Setterを用いてプロパティ値を変更する。 MultiTrigger: Triggerを複数条件に対応させたもの。指定したすべての条件が満たされた場合にトリガーがかかる。 DataTrigger: スタイル適用先のUI要素だけでなく、データ・バインディングされたデータを監視する。 MultiDataTrigger: DataTriggerの複数条件版。 EventTrigger: プロパティ値の変化ではなく、イベントの発生をトリガーとする。また、Setterではなくストーリーボードを使ったアニメーションによりプロパティ値を変化させる。 <コントロール・テンプレートの作成> ボタンなどのコントロールの基底となるControlクラス(System.Windows.Controls名前空間)は Templateというプロパティを持っていて、このTemplateプロパティにControlTemplateクラス (System.Windows.Controls名前空間)のインスタンスを設定すればよい。 リソースの作成例: Window.Resources ResourceDictionary ResourceDictionary.MergedDictionaries ResourceDictionary Source="Dictionary1.xaml" / ResourceDictionary Style TargetType="Button" Setter Property="Background" Value="BlanchedAlmond" /Setter Setter Property="FontSize" Value="30" /Setter /Style /ResourceDictionary /ResourceDictionary.MergedDictionaries /ResourceDictionary /Window.Resources トリガーの作成例: StackPanel.Resources Style TargetType="TextBox" Setter Property="Background" Value="LightGray"/ Style.Triggers Trigger Property="IsMouseOver" Value="True" Setter Property="Background" Value="LightBlue"/ /Trigger Trigger Property="IsFocused" Value="True" Setter Property="Background" Value="LightPink"/ /Trigger /Style.Triggers /Style /StackPanel.Resources コントロール・テンプレートの作成例: Window.Resources Style TargetType="Button" Setter Property="Template" Setter.Value ControlTemplate TargetType="Button" Grid Ellipse Width="100" Fill="{TemplateBinding Background}" / ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/ /Grid /ControlTemplate /Setter.Value /Setter /Style /Window.Resources StackPanel Button Content="ABC" Background="Aqua" Height="50"/ Button Content="DEF" Background="Crimson"/ /StackPanel <利用頻度の高いXAML> VisualStudio上のXAMLはコードで書いた方がスムーズに作業できる。 コードの入力方法が分らない際、プロパティウインドウをヘルプ的に利用してもよいが煩雑なので基本的にコード作業推奨 インテリセンスが利用できない事柄。以下の状況ではまったくインテリセンスが働かないバインディングの際のElementNameのキー値指定やリソースのキー値指定 ルーティングイベントのハンドラの記述(資料) 以上の理由からバインディングの割り当てやリソース値の作成や割り当てはプロパティウインドウを利用するのがやりやすい XAML は大文字と小文字を区別する プロパティ属性値は文字列で設定する。 この文字で指定されたプロパティの値は適切な型変換されなければならない(WFPは既定で特定の型変換のクラスを持っていてコンパイル時適切に処理されている) 必要であれば型変換を自分で作らなければならない XMLで記述する注意点。XAMLの記述にはXML形式を用いるため「 」「 」「 」「"」などの文字はそのままでは利用できない。これにはCDATAセクションを用いる(「 ![CDATA[」と「]] 」で囲む) xmlns 一意の名前 名前空間の指定(オススメはsrc(ソース)など良さそう) 一意の名前 オブジェクト名 これにより名前空間内のCLRオブジェクト(C#のオブジェクト等)にアクセスできる。インスタンスもこれで作成できる !-- Text -- 注釈 x Key 各リソースにキー値、一意の名前を設定します。エレメントに名前を付けたりResourceやStyleやTemplate等さまざまに使用します x Class XAML ページの分離コードを提供するクラスの CLR 名前空間とクラス名を指定します x Code ![CDATA[]] 等と併用すればXAML内にCLRコードなどが埋め込める/ x XData XMLデータアイランドをXAML稼働環境内に配置できるようにします。主にXmlDataProvider の子オブジェクトとして使用される。資料 XmlDataProvider データ バインディングで使用する XML データへの宣言アクセスを有効にします。これによりインライン XML データを埋め込むことができます。プロパティ「XPath」:データ コレクションの生成に使用される XPath クエリを取得または設定します。資料 <単語> Dependency 依存する XAML Extensible Application Markup Language の略。「拡張アプリケーションマークアップ言語」みたいな意味。CLRにおけるオブジェクトのインスタンス(以降、CLRオブジェクト)を生成するためのマークアップ言語。Metroスタイルでも利用できる。 WPF Windows Presentation Foundation の略 Parser パーサー 型変換のこと コードビハインド(code-behind) XAML 中に記述したGUI要素とC#(CLR)で記述したプログラム処理を分離して製作する考え方。デザイナーとプログラマーそれぞれ分けて作業できるようにする仕組み。デザイナーがコードを読まなければいけない時点で仕組み的に、やや無理がある気もする マークアップ拡張 { }で囲まれた部分で行う拡張機能の事。例 Text="{Binding ElementName=slider1, Path=Value}"/ リソースの利用時もマークアップ拡張で指定を行う。例 TextBox Text="{DynamicResource String1}" FontSize="{DynamicResource value}" / アトリビュートシンタックス(Attribute Syntax) プロパティをセットする構文 例<Window Title="MainWindow" Height="350" Width="525" プロパティエレメントシンタックス(Property Element Syntax) プロパティ要素構文。同じくプロパティをセットするがエレメントのような扱いで構文を書く 例 TextBox Width="80" Binding ElementName="slider1" Path="Value"/ /TextBox 少し手の込んだ階層構造のプロパティはこちらの構文でないと書けないものがある URI (Uniform Resource Identifier) インターネット上やローカルのハードディスク内にあるファイルを参照できる仕組み Loose XAML CLRを含まずXAMLのみで動くプログラムの事。IEやfireFox等で動く <ファイル構成> App.xaml この XAML ファイルでは、WPF アプリケーションとすべてのアプリケーション リソースを定義します。 Application.Resources タグ内で指定する。リソースのコードを書く位置に注意 利用するオブジェクトのコードより上(先に宣言しておく必要がある)に書かれている必要がある <データバインドの要点> データーバインディングの概念とデータフローの方向 IC9060.png データバインドの具体的なコード例はWPF_サンプルを参照 こちらも詳しい資料:WPFの「データ・バインディング」を理解する-@IT <利用頻度の高いCLRクラス> ObservableCollection T 通知アリのデータコレクション IValueConverter 型コンバータを作成する際に利用するクラス。ValueConversion属性も合わせて利用するらしい <図形> Rectangle 矩形(四角) Ellipse 円 Polygon 多角形 Line 線 型変換 XAMLプロセッサにとって全てはテキスト文字列として受け取られている 最終的にテキストはプロパティの値の型に変換される必要がある たとえば、 LinearGradientBrush StartPoint="0,0" EndPoint="1,1" のように指定した場合 XAMLプロセッサは既定の設定により"0,0"というstringをPoint.X=0,Point.Y=0という風に型変換している これにはPointConverterクラスが利用されている <PointConverterの例> PointConverter a = new PointConverter(); string str = "12,24"; Point test = (Point)a.ConvertFrom(str); string test2 = (string)a.ConvertTo(test, typeof(string)); これにより文字列"12,24"がPoint型のx=12,y=24に変換される 最後の行ではPoint変換された値を、またもとのstringに変換している ConvertFrom()はXAMLのコンパイル時の型変換に利用され、ConvertTo()はシリアライズに利用される このような仕組みを利用してカスタムな型変換処理を組み込むことができる 詳細は資料:TypeConverters および XAMLを参照 C#(CLR)で書いたクラスをWPFのXAML上でインスタンス化したい場合、まずXAMLのカスタムプレフィクスを定義してアセンブリの型を XAML で参照できるようにする必要がある XAML要素としてのカスタム クラスの要件 カスタム クラスがパブリックであり、既定の (パラメーターなしの) パブリック コンストラクターがサポートされている カスタム クラスが入れ子になっていない。入れ子になったクラスや、そのクラスの一般的な CLR で使用される構文の "ドット" は、添付プロパティなどの他の WPF または XAML の機能に干渉します。 資料:XAML のカスタム プレフィックスとカスタム型 資料:WPF における XAML とカスタム クラス <例> Page x Class="WpfApplication1.Page1" xmlns src="clr-namespace WpfApplication1" これで参照が通っているのでC#内のコードで書かれたPersonクラスをインスタンス化したい場合 Page.Resources src Person x Key="test" Name="このようにプロパティもセットできる"/ /Page.Resources のように一意のキーを指定した上でインスタンス化する。この際プロパティを使って値をセットできる。この場合、以後XAML内で「test」の名前でこのオブジェクトにアクセスできる セットできるプロパティの値は自動的にIDEに識別される。intやstringはもちろんPoint等(Point="12,24"みたいに)も可能。これは正確に言うと型変換されている カスタムクラスのインスタンス化はエレメントのリソース内でしか出来ない(この場合 Page.Resources 内)。たとえばコントローラー内で同じ宣言をするとエラーが出る 「CLR内のオブジェクト」はビルドが通ってはじめてアセンブリとして認識されるので、どこまでIDEがオブジェクトを認識しているか状況把握しておく事(未ビルドで書いたばかりのコードはIDEからみて認識されていない!) 「XAML内のリソース」も同様で未ビルドではIDEに存在を認識されていない。注意する事! 作成したインスタンスは属するエレメントのリソース部によりStaticResourceとして扱われる(上記の例の場合、PageのStaticResourceとして扱われる) インスタンスからプロパティを経由してデータを取り出したい場合はデータバインディングを使用する。以下例 Grid TextBox Text="{Binding Name, Source={StaticResource test}}"/ /Grid List Person のようなコレクションもインスタンス化出来る。C#側は class PesonList List Person {} のような形で宣言しておいてXAML側は以下のようにします Window.Resources src PesonList x Key="ListTest" src Person Name="test1" ID="1"/ src Person Name="test2" ID="2"/ src Person Name="test3" ID="3"/ /src PesonList /Window.Resources この2行は何をしているか?について xmlns="http //schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns x="http //schemas.microsoft.com/winfx/2006/xaml" C#におけるusingのクラスライブラリの読み込みみたいなものらしい 詳しくはXAML ルート要素と XAML 名前空間を参照 using System.Linq; using System.Text; こんな感じでXAMLで利用するセットを名前空間で設定している(・・・クラスライブラリの外部サーバーへの配置。クラウド化みたいな考えで良いのかな?) この部分は何をしているか?について xmlns System="clr-namespace System;assembly=mscorlib" x Class="WpfApplication1.MainWindow" ここで読み込まれている mscorlib.dll(DLLファイル)には、.NET Frameworkの基本的なクラス・ライブラリのアセンブリが含まれており これらのサービスを利用できるようにSystemという名前のキーにセットしている。利用したい場合は以下の例のように使う Button System DateTime 2004/3/4 13 6 55 /System DateTime /Button x Class属性には分離コードで実装するクラス名、上記の場合「WpfApplication1」名前空間のMainWindowクラスに分離コードを置く事を指定している (「ビュー・モデルビュー・モデル」で言えば「モデルビュー・モデル」のコード(C#のCLR)を置く場所を指定している) x Name属性にはフィールド名を指定する XAML内のクラスのインスタンスの作成は FrameworkElement.Resources プロパティ によって行う object object.Resources oneOrMoreResourceElements /object.Resources /object object オブジェクト名 oneOrMoreResourceElements ここにリソース作成の為のコードを書く C#からは public ResourceDictionary Resources { get; set; } で拾える。以下C#のCLRの例。(どのエレメントに属したリソースかが重要でコードの位置によって「this」等が必要な事に注意する) LinearGradientBrush a = (LinearGradientBrush)this.Resources["backgroundBrush1"]; この場合、backgroundBrush1 がXAML側で設定したキー
https://w.atwiki.jp/atachi/pages/33.html
コンテナ コントロール コントロールの作成 MSDNに説明があります。 MSDN コントロールの作成の概要 UserControlを使ってカスタムコントロールを作成する WPFデザイナを用いる UserControlのサブクラスを使う FrameworkElementのサブクラスを使う FrameworkElementを仕様したカスタムコントロールの作成 FrameworkElementはWPFで使用できるコントロールを実装するための最小限度の機能を持ったクラスで、WPFが提供する多くのコントロールでもスーパークラスとして使用しています。 FrameworkElementを使ってカスタムコントロールを作成する利点は、FrameworkElementのコンテキストに直接レンダリングを行える点です。アプリケーションが動的にグラフや図をレンダリングするためのコントロールを必要とする場合に特に有効です。
https://w.atwiki.jp/osinko/pages/123.html
<WPFを使う上で必ず理解する必要がある重要なもの> 添付プロパティ Attached Property コンテナとなる親のプロパティを子で設定する。例:親からの相対位置座標などのプロパティ 値の包含継承 WPFではFontSizeプロパティなど一部のプロパティ値は親要素から継承するようになっている 依存関係プロパティ バインディング データコンテキスト ビューとモデルの接点にすると良いプロパティ。子のBindingの参照に継承される データーテンプレート <添付プロパティの例> Canvas Width="400" Height="300" Rectangle Canvas.Left="30" Canvas.Top="30" Width="50" Height="50" Fill="Red"/ /Canvas Rectangleの「Canvas.Left="30" Canvas.Top="30"」は親からの添付プロパティとなる <詳細できめが細かい資料> 資料:XAMLの細かい仕様を知ることができる:WPFのXAML XAML 名前空間 (x ) 言語機能 <学習中ひきだし> https //www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%EF%BC%B7%EF%BC%B0%EF%BC%A6+ImageDraw&num=50#hl=ja&lr=lang_ja&tbs=lr lang_1ja&sclient=psy-ab&q=%EF%BC%B7%EF%BC%B0%EF%BC%A6+Image+Draw&oq=%EF%BC%B7%EF%BC%B0%EF%BC%A6+Image+Draw&gs_l=serp.3..0i19j0i10i30i19j0i30i19l3j0i10i30i19l2j0i30i19.584873.584873.0.585193.1.1.0.0.0.0.147.147.0j1.1.0...0.0...1c.1.55ciRH8WXOU&pbx=1&bav=on.2,or.r_gc.r_pw.r_qf.&fp=394a8366997e8620&biw=1897&bih=937 http //msdn.microsoft.com/ja-jp/library/ms749287.aspx← http //msdn.microsoft.com/ja-jp/library/system.windows.controls.primitives.selector.selectedvalue.aspx http //ufcpp.net/study/dotnet/wpf_xamladv.html http //msdn.microsoft.com/ja-jp/library/ff602279.aspx http //code.msdn.microsoft.com/windowsdesktop/MVVM-d8261534 チュートリアル WPF の概要 データ バインディングに関する「方法」トピック パネルの概要 グラフィックスとマルチメディア アニメーションの概要 チュートリアル WPF デザイナーによるデータ バインディングの作成 チュートリアル WPF デザイナーでの XAML の編集 データ バインド (WPF) XAMLの細かい仕組みの説明:XAML の概要 (WPF) XAML とコードのチュートリアル <何時か役立つときが来るかもしれないメモ> C# または Visual Basic を使った Metro スタイル アプリのためのロードマップ クイック スタート コントロールの追加とイベントの処理 (C#/VB/C++ と XAML を使った Metro スタイル アプリ) クイック スタート コントロールのスタイル (C#/VB/C++ と XAML を使った Metro スタイル アプリ)
https://w.atwiki.jp/atachi/pages/49.html
WPF時代のグラフィックス ビジュアルオブジェクト カスタムコントロール WPFでの画像の扱い グラフィックス関連のクラス構成 [#i1cf7c34] レンダリング シェイプ ブラシ ブラシの種類 ジオメトリ ジオメトリの描画 [#l2dbcfd6] レンダリング UIのレンダリング ビットマップのレンダリング WPF時代のグラフィックス WPFではボタンやツリービューなどのコントロールの外観を描画する方法に新しい方式を取り入れています。 これまでは、グラフィックスとしてピクセルの描画を行っていましたが、WPFではこれらがパスなどを用いたドローイング方式となりました。 ビジュアルオブジェクト WPFでは描画する領域をビジュアルオブジェクトと呼び、ビジュアルオブジェクトに対し描画関数により図形の描画を行います。 すべてのコントロールは1つから複数のビジュアルオブジェクトの組み合わせで描画されており、コントロール自身もビジュアルオブジェクトです。 ビジュアルオブジェクトは親子関係を構築することができます。 コントロール自身もビジュアルオブジェクトなので、ボタンの文字が表示される場所に画像を表示したり、ツリービューコントロールを表示することもできます。 予め用意されているWPFで使用できるコントロールはFrameworkElementのサブクラスです。 カスタムコントロール 自分で独自のコントロールを作成する場合、ソースコードで定義するにはFrameworkElementのサブクラスとして作成します。 WPFでの画像の扱い WPFではBitmapSourceのサブクラスを主に扱います。このクラスはWPFのコントロールやスタイルと共に使いやすいように様々なプロパティやインターフェースを持ったものです。 GDI+ではImageクラスを主に扱います。Imageクラスは画像そのものをデータとしてクラスにカプセル化したものでこのクラス自体は画像への操作などは行うことができません。 グラフィックス関連のクラス構成 Object └ DispathcerObject └ DependencyObject └ Freezable └ Animatable └ ImageSource ├ BitmapSource │ ├ BitmapFrame MSDN │ └ BitmapImage └ DrawingImage レンダリング DrawingVisualは図形などを描画するためのコンテキストや描画した図形情報を格納しています。 実際にDrawingVisualに図形を描画するにはDrawingVisualからDrawingContextを取得します。 DrawingVisual dv = new DrawingVisual(); using(DrawingContext dc = dv.RenderOpen()){ dc.DrawEllipse(Brushes.Red,null,new Point(0,0), 1,1); } シェイプ System.Windows.Shapes名前空間に属した形を描画するためのクラス群です。 シェイプはベクターグラフィックスなので、解像度の変更にもスムーズに適切な解像度で描画されます。 Rectangle 矩形 Ellipse 楕円 Line 直線 Path 曲線 Polygon 多角形 Polyline 閉じていない多角形 PolygonとPolylineは似ていますが、複数の直線で構成された図形がとじているか閉じていないかで異なります。 また、Pathは連続した直線・曲線となります。 ブラシ // 正方形の矩形 Rectangle rect = new Rectangle(); rect.Width = 75; rect.Height = 75; // 矩形を単色で塗りつぶす SolidColorBrush myBrush = new SolidColorBrush(Colors.Red); rect.Fill = myBrush; ブラシの種類 SolidColorBrush 単色塗りつぶし LinearGradientBrush 線形グラデーション塗りつぶし RadialGradientBrush 円形グラデーション塗りつぶし ImageBrush 画像による塗りつぶし(拡大・縮小・タイル) DrawingBrush VisualBrush ジオメトリ ジオメトリはドロー系ソフトの「パス」と考えるとわかりやすい。(Adobe Illustratorなど) ジオメトリによって描画した図形は、拡大・縮小を行う際にその都度、座標を変えて再描画する必要がない(自動的に計算される) また、イージングなどのアニメーションが可能で、始点と終点の座標を与えれば中割の描画は自動的に計算され表示される。 このような特徴を持ったジオメトリは、Geometry クラスを基点としたクラスツリーをとる。 図形の描画に関しては、Shapeと同じものが用意されている。 // Create a figure that describes a // line from (10,20) to (100,130). PathFigure myPathFigure = new PathFigure(); myPathFigure.StartPoint = new Point(10,20); myPathFigure.Segments.Add( new LineSegment(new Point(100,130), true /* IsStroked */ )); /// Create a PathGeometry to contain the figure. PathGeometry myPathGeometry = new PathGeometry(); myPathGeometry.Figures.Add(myPathFigure); // Display the PathGeometry. Path myPath = new Path(); myPath.Stroke = Brushes.Black; myPath.StrokeThickness = 1; myPath.Data = myPathGeometry; canvas1.Children.Add(myPath); ジオメトリの描画 ジオメトリをVisualObjectに描画するにはUIElementクラスである必要があります。 UIElementのサブクラスであるPathクラスを使用してジオメトリをCanvasに描画するのが一般的です。 // Display the PathGeometry. Path myPath = new Path(); myPath.Stroke = Brushes.Black; myPath.StrokeThickness = 1; myPath.Data = myPathGeometry; // ジオメトリを設定 canvas1.Children.Add(myPath); // XAMLなどで定義したCanvas レンダリング 画像のレンダリングには、作成する画像の目的によって2種類の方法があります。 1つ目がユーザーインターフェース用の画像の作成です。ユーザーインターフェースではどのような環境でも表示される事が望まれるため、表示環境(DPIなど)に影響されにくいような描画システムを必要とします。 2つ目がビットマップなどの画像を作成するためのレンダリングです。 こちらは主にマルチメディアのための画像です。 それぞれレンダリングするためのクラスが異なります。 前者は、System.Windows.Media名前空間に属しています。 後者は、System.Drawing名前空間に属しており、GDI+とよばれる描画ライブラリのラッパーです。 UIのレンダリング ボタンなどのフォームコントロールを表示するための画像はDrawingVisualクラスを使用します。 このクラスは画像作成のためのコンテキストを持っており、プログラムによって図形を描画した後、ビットマップとして画像を取得できます。 このコンテキストは画像や図形を描画するためのメソッドを備えているため、簡単に図形を作成することができます。 出来上がるのは1枚のビットマップであるため、マウスイベントなどの処理はできません。 DrawingVisual drawingVisual = new DrawingVisual(); // 描画用のコンテキストを取得 DrawingContext drawingContext = drawingVisual.RenderOpen(); // 矩形を描画 Rect rect = new Rect(new System.Windows.Point(160, 100), new System.Windows.Size(320, 80)); drawingContext.DrawRectangle(System.Windows.Media.Brushes.LightBlue, (System.Windows.Media.Pen)null, rect); // コンテキストを閉じる drawingContext.Close(); 次のようにすればビットマップとして描画した画像を取り出せます。 RenderTargetBitmap bmp = new RenderTargetBitmap(180, 180, 120, 96, PixelFormats.Pbgra32); bmp.Render(drawingVisual); ビットマップのレンダリング Bitmap myBitmap = new Bitmap(100, 100); // レンダリングするためのキャンバスを作成します。 // この例では「100×100」の画像を作成します。 Graphics g = Graphics.FromImage(myBitmap); // 描画用コンテキストの作成
https://w.atwiki.jp/pcmemo/pages/28.html
WPF アプリケーションの終了 Application.Shutdownメソッドを呼ぶ 現在のApplicationオブジェクトは静的プロパティApplication.Currentから取得する Application.Current.Shutdown(); 添付プロパティ RectangleににCanvas添付プロパティで座標を設定する Rectangle r = new Rectangle(); Canvas.SetLeft(r, 10); Canvas.SetTop(r, 15); ScrollViewerのスクロールバー分を計算 水平・垂直スクロールバーを含めない内側のサイズを固定したいとき XAML ScrollViewer Name="scrvwr" Width="300" Height="200" Canvas Name="cnvs" Width="600" Height="400" /Canvas /ScrollViewer cs int vBarWidth = scrvwr.Width - (int)cnvs.ActuralWidth; //垂直スクロールバーの幅 int hBarHeight = scrvwr.Height - (int)cnvs.ActualHeight; //水平スクロールバーの高さ //ScrollViewerのサイズ変更 scrvwr.Width += vBarWidth; scrvwr.Height += hBarHeight; マウスイベント MouseMove中にマウス左ボタンが押されているかを取得 XAML Canvas Name="cnvs" MouseMove="cnvs_MouseMove" /Canvas cs public void cnvs_MouseMove(object sender, MouseEventArgs e){ if(e.LeftButton == MouseButtonState.Pressed){ //左ボタンが押されているときの処理 } } Polygonクラスの使い方 PointCollection PointsにPointをAddして座標を指定する Polygon p = new Polygon(); p.Points.Add(new Point(0, 0)); p.Points.Add(new Point(10, 0)); p.Points.Add(new Point(0, 10)); p.Fill = Brushes.Blue; //塗りつぶしの色 p.Stroke = Brushes.Black; //輪郭の色